home *** CD-ROM | disk | FTP | other *** search
/ Light ROM 1 / LIGHT-ROM 1 (Amiga Library Services)(1994).iso / ffdisks / d883.lha / BBBBS / BBBBS59.lha / rexx / bbsULDL.rexx < prev    next >
OS/2 REXX Batch file  |  1993-06-05  |  6KB  |  237 lines

  1. /*        $VER: 5.9 bbsULDL.rexx 5 Jun 1993 (5.6.93)
  2.             - counts upload/download statistics -
  3. copyright 1990-93 Richard Lee Stockton * FREELY DISTRIBUTABLE
  4. */
  5.  
  6. CALL TIME('R')
  7. HOW_MANY=25
  8. CALL PRAGMA('P',-2)
  9. SIGNAL ON ERROR
  10. SIGNAL ON SYNTAX
  11. SIGNAL ON FAILURE
  12. NUMERIC DIGITS 14
  13.  
  14. inarg=''
  15. PARSE ARG inarg .
  16. test=COMPRESS(UPPER(inarg),' -')
  17. IF test='?' | test='H' | test='USAGE' | test='HELP' THEN
  18.   DO
  19.     SAY 'Usage: rx bbsULDL [filename or CLI]'
  20.     SAY
  21.     SAY 'CLI writes to the console.'
  22.     SAY 'If a filename or the letters CLI are not included,'
  23.     SAY 'writes to a file called Information/STATS.ULDL'
  24.   END
  25.  
  26. IF inarg='' THEN
  27.   DO
  28.     CALL CLOSE(STDOUT)
  29.     CALL OPEN(STDOUT,'RAM:bbsULDL.STDOUT','W')
  30.   END
  31. figarg='s:CONFIG.BBS'
  32. IF ~EXISTS(figarg) THEN figarg='BBS:BBS_TEXT/CONFIG.BBS'
  33. x=OPEN(f,figarg,'R')
  34. IF x=0 THEN
  35.   DO
  36.     SAY 's:CONFIG.BBS and BBS:BBS/CONFIG.BBS are both missing!'
  37.     EXIT(20)
  38.   END
  39.  
  40. CALL SETCLIP('BBS_STAT','ON')
  41. lynes.=''
  42. DO i=1 TO 6
  43.   lynes.i=READLN(f)
  44. END
  45. CALL CLOSE(f)
  46.  
  47. compos=POS('/*',lynes.1)
  48. IF compos>0 THEN lynes.1=LEFT(lynes.1,compos-1)
  49.  
  50. bbsname = STRIP(lynes.1)
  51. sysop   = WORD(lynes.2,1)
  52. bbspath = WORD(lynes.6,1)
  53. IF ~EXISTS(bbspath) THEN
  54.   DO
  55.     SAY bbspath 'does not exist!'
  56.     CALL SETCLIP('BBS_STAT')
  57.     EXIT(20)
  58.   END
  59. testchar=RIGHT(bbspath,1)
  60. IF testchar~='/' & testchar~=':' THEN bbspath=bbspath'/'
  61.  
  62. counts.=0
  63. namelist=''
  64. filelist.=''
  65. x=OPEN(f,bbspath'Lists/Files','R')
  66. IF x=0 THEN
  67.   DO
  68.     SAY 'Could not open' bbspath'Lists/Files!'
  69.     CALL SETCLIP('BBS_STAT')
  70.     EXIT(20)
  71.   END
  72. DO i=1
  73.   line=READLN(f)
  74.   IF EOF(f) THEN LEAVE i
  75.   filelist.i=line
  76. END
  77. filelist.0=i-1
  78. CALL CLOSE(f)
  79.  
  80. DO i=1 TO filelist.0
  81.   filenote=bbspath'FileNotes/'WORD(filelist.i,2)'/'WORD(filelist.i,3)
  82.   x=OPEN(f,filenote,'R')
  83.   IF x=0 THEN
  84.     DO
  85.       SAY filenote 'did not open!'
  86.       ITERATE i
  87.     END
  88.   line1=READLN(f)
  89.   line2=READLN(f)
  90.   line3=READLN(f)
  91.   CALL CLOSE(f)
  92.   size=WORD(line2,4)
  93.   dls=WORD(line2,7)
  94.   name=WORD(line3,2)
  95.   IF FIND(namelist,name)=0 THEN namelist=namelist name
  96.   counts.name.BYTES=counts.name.BYTES+size
  97.   counts.TOTAL.BYTES=counts.TOTAL.BYTES+size
  98.   counts.name.ULOADS=counts.name.ULOADS+1
  99.   counts.TOTAL.DLOADS=counts.TOTAL.DLOADS+dls
  100.   filelist.i.0=name
  101.   filelist.i.1=dls
  102.   filelist.i.2=size
  103. END
  104.  
  105. largest.=0
  106. DO nameindex=1 TO WORDS(namelist)
  107.   name=WORD(namelist,nameindex)
  108.   IF counts.name.BYTES>largest.HOW_MANY & name~=UPPER(sysop) THEN
  109.     DO
  110.       line=LEFT(name,20) LEFT(' ',21) RIGHT(comma(counts.name.BYTES),11) 'bytes'RIGHT(comma(counts.name.ULOADS),5) 'files'
  111.       largest.HOW_MANY=counts.name.BYTES
  112.       largest.HOW_MANY.0=line
  113.       DO j=HOW_MANY-1 TO 1 BY -1
  114.         jj=j+1
  115.         IF largest.jj<=largest.j THEN LEAVE j
  116.         temp=largest.jj
  117.         temp0=largest.jj.0
  118.         largest.jj=largest.j
  119.         largest.jj.0=largest.j.0
  120.         largest.j=temp
  121.         largest.j.0=temp0
  122.       END
  123.     END
  124. END
  125.  
  126. popular.=0
  127. DO i=1 TO filelist.0
  128.   IF filelist.i.1>popular.HOW_MANY THEN
  129.     DO
  130.       name=WORD(filelist.i,3)
  131.       line=RIGHT(filelist.i.1,4) LEFT(name,22) RIGHT(WORD(filelist.i,1),5) LEFT(WORD(filelist.i,2),18) LEFT(filelist.i.0,20)
  132.       popular.HOW_MANY=filelist.i.1
  133.       popular.HOW_MANY.0=line
  134.       DO j=HOW_MANY-1 TO 1 BY -1
  135.         jj=j+1
  136.         IF popular.jj<=popular.j THEN LEAVE j
  137.         temp=popular.jj
  138.         temp0=popular.jj.0
  139.         popular.jj=popular.j
  140.         popular.jj.0=popular.j.0
  141.         popular.j=temp
  142.         popular.j.0=temp0
  143.       END
  144.     END
  145. END
  146.  
  147.  
  148.  
  149. /* OUTPUT */
  150.  
  151. IF inarg='' THEN inarg=bbspath'Information/STATS.ULDL'
  152. IF UPPER(inarg)~='CLI' THEN
  153.   DO
  154.     CALL CLOSE(STDOUT)
  155.     CALL OPEN(STDOUT,inarg,'W')
  156.     IF x=0 THEN
  157.       DO
  158.         SAY inarg 'would not open for writing!'
  159.         CALL SETCLIP('BBS_STAT')
  160.         EXIT(20)
  161.       END
  162.   END
  163.  
  164. SAY LEFT('-',75,'-')
  165. SAY TRIM(CENTER('Upload/Download statistics through' DATE() 'at' TIME('C'),75))
  166. SAY TRIM(CENTER(bbsname,75))
  167. SAY TRIM(CENTER(comma(counts.TOTAL.BYTES) 'bytes in' comma(filelist.0) 'files uploaded by' comma(WORDS(namelist)) 'of' comma(WORDS(SHOWDIR(bbspath'Users'))) 'current users.',75))
  168. SAY LEFT('-',75,'-')
  169.  
  170. SAY
  171. SAY
  172. SAY CENTER('Top' HOW_MANY 'favorite files from' comma(counts.TOTAL.DLOADS) 'total downloads',75)
  173. SAY LEFT('-',75,'-')
  174. SAY '  DLoads' LEFT('Filename',22) 'File#' LEFT('Library',18) LEFT('Uploader',20)
  175. SAY LEFT('-',75,'-')
  176. DO i=1 TO HOW_MANY
  177.   IF popular.i=0 THEN LEAVE i
  178.   SAY RIGHT(i,2)'.' popular.i.0
  179. END
  180.  
  181. SAY
  182. SAY
  183. SAY CENTER('Top' HOW_MANY 'uploaders of files currently in the libraries (excludes sysop)',75)
  184. SAY LEFT('-',75,'-')
  185. DO i=1 TO HOW_MANY
  186.   IF largest.i=0 THEN LEAVE i
  187.   x=OPEN(f,bbspath'Users/'STRIP(WORD(largest.i.0,1)),'R')
  188.   IF x=0 THEN ITERATE i
  189.   CALL READLN(f)
  190.   CALL READLN(f)
  191.   city=READLN(f)
  192.   CALL CLOSE(f)
  193.   city=TRANSLATE(city,'     ','+-.*/')
  194.   DO j=WORDS(city) TO 1 BY -1
  195.     IF DATATYPE(WORD(city,j),'N') THEN city=STRIP(DELWORD(city,j,1))
  196.     IF UPPER(WORD(city,j))='USA' THEN city=STRIP(DELWORD(city,j,1))
  197.   END
  198.   city=SPACE(city,1)
  199.   SAY RIGHT(i,2)'.' OVERLAY(city,largest.i.0,22,21)
  200. END
  201. SAY
  202. SAY ' - total seconds to compile this upload/download report:' TIME('E')' -'
  203. SAY
  204. CALL SETCLIP('BBS_STAT')
  205. EXIT;
  206.  
  207.  
  208. comma:
  209. ARG num .
  210. dgt=LENGTH(num)
  211. numtext=''
  212. IF dgt>3 THEN numtext=','RIGHT(num,3)
  213. IF dgt>6 THEN numtext=','LEFT(RIGHT(num,6),3)||numtext
  214. IF dgt>9 THEN
  215.   DO
  216.     numtext=','LEFT(RIGHT(num,9),3)||numtext
  217.     numtext=LEFT(num,dgt-9)||numtext
  218.   END
  219. ELSE IF dgt>6 THEN numtext=LEFT(num,dgt-6)||numtext
  220. ELSE IF dgt>3 THEN numtext=LEFT(num,dgt-3)||numtext
  221. ELSE numtext=num
  222. RETURN(numtext)
  223.  
  224.  
  225. SYNTAX:
  226. FAILURE:
  227. ERROR:
  228. SAY 'Line:' SIGL ERRORTEXT(RC)
  229. SAY
  230. SAY line1
  231. SAY line2
  232. SAY line3
  233. CALL SETCLIP('BBS_STAT')
  234. EXIT;
  235.  
  236. /* end of uldl.rexx */
  237.